package com.chenjl.transaction.service;

import com.chenjl.transaction.dto.MessageQueueBody;
/**
 * 抽象MQ发送的服务，对外屏蔽MQ的特性
 * 2019-9-9 14:10:45
 * @author chenjinlong
 */
public interface MessageQueueService {
	
	/**
	 * 发送消息到Exchange，寄存在业务的Transaction中
	 * @param exchange
	 * @param routingKey 如果exchange为fanout，routingKey被忽略
	 * @param jsonStr 消息体
	 * @return
	 */
	public boolean sendToExchange(String exchange,String routingKey,String jsonStr);
	
	/**
	 * 发送消息到Queue，不走用户定义的Exchange，寄存在业务的Transaction中
	 * @param queueName 队列名称
	 * @param jsonStr 消息体
	 * @return
	 */
	public boolean sendToQueue(String queueName,String jsonStr);
	
	/**
	 * 将失败的消息重发，由定时Job唤起
	 */
	public void resend();
	
	/**
	 * 检查该条消息是否可以消费，寄存在业务的Transaction中
	 * @param messageQueueBody
	 * @param consumerQueue
	 * @return 可以消费返回true；不可以消费返回false，表示消息重复
	 */
	public boolean canQueueConsume(MessageQueueBody messageQueueBody,String consumerQueue);
}